#include<bits/stdc++.h>
using namespace std;
inline long long read(){
	long long ret=0,neg=1;
	char c=(char)getchar();
	while(c!='-'&&isdigit(c)==false) c=(char)getchar();
	if(c=='-'){
		neg=-1;
		c=(char)getchar();
	}
	while(isdigit(c)){
		ret=ret*10+c-'0';
		c=(char)getchar();
	}
	return ret*neg;
}
void write(long long x){
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x>=10) write(x/10);
	putchar((x%10)+'0');
}

char str[1000010];
int n;

int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
int di[4]={2,4,5,1};
int ic[6]={0,0,1,1,2,2};
int ans[1000010];

mt19937 rand1(chrono::high_resolution_clock::now().time_since_epoch().count());
inline int Random(int l,int r){
	return rand1()%(r-l+1)+l;
}

int main(){
	// scanf("%s",str+1);
	// n=strlen(str+1);
	// for(int i=1;i<=n;++i){
	// 	if(str[i]=='R'){
	// 		str[i]=0;
	// 	}
	// 	if(str[i]=='G'){
	// 		str[i]=1;
	// 	}
	// 	if(str[i]=='B'){
	// 		str[i]=2;
	// 	}
	// }
	cin>>n;
	for(int i=1;i<=n;++i){
		str[i]=Random(0,2);
	}
	int cx,cy,ci;
	cx=0;
	cy=str[1]*2;
	ci=cy;
	int mmx=0;
	for(int i=2;i<=n;++i){
		int md=-1,dr=-1;
		for(int k=0;k<4;++k){
			if(ic[(ci+di[k])%6]==str[i]){
				if(md==-1||max(abs(cx+dx[k]),abs(cy+dy[k]))<md){
					md=max(abs(cx+dx[k]),abs(cy+dy[k]));
					dr=k;
				}
			}
		}
		mmx=max(mmx,md);
		ans[i]=dr;
		cx+=dx[dr];
		cy+=dy[dr];
		ci+=di[dr];
		ci%=6;
		cout<<cx<<' '<<cy<<endl;
	}
	cout<<mmx<<endl;
	return 0;
}